#include <iostream>
#include <chrono>
#include <array>
#include <vector>
#include "svec1d.h"
#include <valarray>
using namespace std;
using namespace std::chrono;
int main()
{
    // clang++ 编译的结果
    // 性能差了5倍, array 和 静态数组
    // 自建的vec1d 效率为std::vector 的三倍
    // 自建的vec1d 效率为裸动态数组的二分之一（两倍运行时间）
    // 自建的vec1d 与valarray相当
    // double a[11] = {0.0};
    // array<double, 11> b{0.0};

    // g++对标准库支持的很好 自建的与vector 没啥区别
    // 但clang++对自建的运行效率优于g++ 但对标准库支持弱于g++ 
    // 最重要的应在Linux上测试 g++对array支持不太好，十倍运行时间
    // 自建的静态与标准库不差 clang++  比array好 g++
    // vector<double> a(11, 0.0);
    // double *a = new double[11]{0.0};
    // valarray<double> a(10);
    // a = 0.0;
    svec1d<double, 11> b;
    b = 0.0;
    // auto t1 = steady_clock::now();
    // for (int i = 0; i < 100000000; ++i)
    // {
    //     a[2] = a[8];
    //     a[8] = a[6];
    //     a[6] = a[2];
    // }
    // auto t2 = steady_clock::now();
    // auto d1{duration_cast<duration<double>>(t2 - t1)};
    // cout << d1.count() << "\n";

    auto t3 = steady_clock::now();
    for (int i = 0; i < 100000000; ++i)
    {
        b[2] = b[8];
        b[8] = b[6];
        b[6] = b[2];
    }
    auto t4 = steady_clock::now();
    auto d2{duration_cast<duration<double>>(t4 - t3)};
    cout << d2.count() << "\n";


    return 0;
}